import { iconExists, getIcon, addIcon, addCollection, loadIcon, loadIcons } from '@iconify/vue'

export const IconifyIconExists_Name = 'IconifyIconExists'
export const getIconifyIcon_Name = 'getIconifyIcon'
export const addIconifyIcon_Name = 'addIconifyIcon'
export const addIconifyCollection_Name = 'addIconifyCollection'
export const loadIconifyIcon_Name = 'loadIconifyIcon'
export const loadIconifyIcons_Name = 'loadIconifyIcons'

export type IconifyIconExists = typeof iconExists
export type getIconifyIcon = typeof getIcon
export type addIconifyIcon = typeof addIcon
export type addIconifyCollection = typeof addCollection
export type loadIconifyIcon = typeof loadIcon
export type loadIconifyIcons = typeof loadIcons

export const IconifyVueUtil_Name = 'IconifyVueUtil'

export const IconifyVueUtil: {
  iconExists: IconifyIconExists
  getIcon: getIconifyIcon
  addIcon: addIconifyIcon
  addCollection: addIconifyCollection
  loadIcon: loadIconifyIcon
  loadIcons: loadIconifyIcons
} = {
  /**
   * 检查图标数据是否可用于渲染
   *
   * @param {string} name 图标名称
   * @returns {boolean} 是否可用于渲染，如果图标可用，则返回true；如果图标不可用，则返回false。
   */
  iconExists,
  /**
   * 从本地存储图标数据中获取指定的图标数据
   *
   * @param {string} name 图标名称
   * @returns {IconifyIcon | null} IconifyIcon 对象，如果图标数据不存在，则返回 null
   */
  getIcon,
  /**
   * 将图标数据添加到本地存储图标数据中
   *
   * @param {string} name 图标名称
   * @param {IconifyIcon} data 图标数据
   * @returns {boolean} 是否添加成功，如果添加成功，则返回 true；如果添加失败，则返回 false。
   */
  addIcon,
  /**
   * 将图标集中所有图标数据添加到本地存储图标数据中
   *
   * @param {IconifyJSON} data 图标集数据
   * @param {string} provider API提供程序ID
   * @returns {boolean} 是否添加成功，如果添加成功，则返回 true；如果添加失败，则返回 false。
   */
  addCollection,
  /**
   * 使用 Iconify API 检索获取图标数据
   *
   * @param {string | IconifyIconName} icon 图标名称
   * @returns {Promise<Required<IconifyIcon>>} 图标数据
   */
  loadIcon,
  /**
   * 使用 Iconify API 检索获取多个图标数据
   * 详细使用方法请参考：https://iconify.design/docs/icon-components/vue/load-icons.html
   *
   * @param {(string | IconifyIconName)[]} icons 图标名称
   * @param {IconifyIconLoaderCallback} callback 从 Iconify API 检索获取到图标数据时会调用的回调函数
   * @returns {IconifyIconLoaderAbort} 返回一个函数，可以用它来停止加载图标。例如，当正在加载自定义组件中的图标时，但组件的生命周期在图标加载
   * 之前就结束了，因此需要调用返回的函数停止加载图标，删除回调。
   */
  loadIcons
}
